iT邦幫忙

2023 iThome 鐵人賽

DAY 30
0
Software Development

30天快速打造Python資料結構&演算法邏輯刷爆LeetCode系列 第 30

DAY 30 「單調隊列(Monotonic queue)Leetcode」進入面試的Python程式碼撰寫~

  • 分享至 

  • xImage
  •  
  • 每日溫度(Daily Temperatures) - 題號:739
    題目描述:根據每日氣溫列表,請返回一個列表,其中存儲了你需要等待多久才能看到一個更高的溫度。如果之後都沒有更高的溫度,那麽將在該位置存放 0。
def dailyTemperatures(T):
    stack, result = [], [0] * len(T)
    for i, temp in enumerate(T):
        while stack and temp > T[stack[-1]]:
            j = stack.pop()
            result[j] = i - j
        stack.append(i)
    return result
  • 下一個更大元素I(Next Greater Element I) - 題號:496
    題目描述:給定兩個沒有重覆元素的數組 nums1 和 nums2 ,其中 nums1 是 nums2 的子集。找到 nums1 中每個元素在 nums2 中的下一個比其大的值,如果不存在下一個更大的值,返回 -1 。
def nextGreaterElement(nums1, nums2):
    stack, mapping = [], {}
    for num in nums2:
        while stack and num > stack[-1]:
            mapping[stack.pop()] = num
        stack.append(num)
    return [mapping.get(num, -1) for num in nums1]
  • 下一個更大元素II(Next Greater Element II) - 題號:503
    題目描述:給定一個循環數組(最後一個元素的下一個元素是第一個元素),輸出每個元素的下一個更大元素。
def nextGreaterElements(nums):
    stack, result = [], [-1] * len(nums)
    for i in range(2 * len(nums) - 1):
        while stack and nums[i % len(nums)] > nums[stack[-1]]:
            result[stack.pop()] = nums[i % len(nums)]
        stack.append(i % len(nums))
    return result
  • 接雨水(Trapping Rain Water) - 題號:42
    題目描述:給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。
def trap(height):
    left, right = 0, len(height) - 1
    left_max, right_max = 0, 0
    result = 0
    while left < right:
        if height[left] < height[right]:
            if height[left] >= left_max:
                left_max = height[left]
            else:
                result += left_max - height[left]
            left += 1
        else:
            if height[right] >= right_max:
                right_max = height[right]
            else:
                result += right_max - height[right]
            right -= 1
    return result
  • 柱狀圖中最大的矩形(Largest Rectangle in Histogram) - 題號:84
    題目描述:給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 ,求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。
def largestRectangleArea(heights):
    stack, max_area = [], 0
    heights.append(0)
    for i in range(len(heights)):
        while stack and heights[i] < heights[stack[-1]]:
            height = heights[stack.pop()]
            width = i if not stack else i - stack[-1] - 1
            max_area = max(max_area, height * width)
        stack.append(i)
    return max_area

上一篇
DAY 29 「組合(Combinations)Leetcode」必考的Python程式碼撰寫~
系列文
30天快速打造Python資料結構&演算法邏輯刷爆LeetCode30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言